package arrayPractice;

public class LongestPalindrome {
////  todo:方法１
//    public String longestPalindrome(String s) {
//        //长度为1的字符串的单独考虑
//        if(s.length()==1)  return s;
//        int maxlength=0;
//        String ans="";
//        for(int i=0;i<s.length()-1;i++){
//            //注意j<=s.length()，因为substring(i,j) 截取的字符串区间是前闭后开的，即[i,j)
//            for(int j=i+1;j<=s.length();j++){
//                String temp=s.substring(i,j);
//                if(isPalindrome(temp)&&temp.length()>maxlength){
//                    ans=temp;
//                    maxlength=ans.length();
//                }
//            }
//        }
//        return ans;
//    }
//
//    //判断是否是回文串的函数
//    public boolean isPalindrome(String s){
//        int length=s.length();
//        for(int i=0;i<length/2;i++){
//            if(s.charAt(i)!=s.charAt(length-i-1))
//                return false;
//        }
//        return true;
//    }
//
//
//    //  todo:方法２
//    //中心扩散法
//        public String longestPalindrome1(String s) {
//            int length=s.length();
//            int start=0;
//            int end=0;
//
//            for(int i=0;i<length;i++){
//                int odd=getLength(s,i,i);
//                int even=getLength(s,i,i+1);
//                int temp=odd>even ? odd : even ;
//                //求出最长回文串的起始和终止位置，注意start与end的计算方法
//                if(temp>end-start){
//                    start=i-(temp-1)/2;
//                    end=i+temp/2;
//                }
//            }
//            return s.substring(start,end+1);
//        }
//
//
//        public int getLength(String s,int left,int right){
//            while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){
//                left--;
//                right++;
//            }
//            //注意回文串长度的计算right-left+1-2
//            return right-left-1;
//        }

    public String longestPalindrome(String s) {
        String res = "";
        for (int i = 0; i < s.length(); i++) {
            // 以 s[i] 为中心的最长回文子串
            String s1 = palindrome(s, i, i);
            // 以 s[i] 和 s[i+1] 为中心的最长回文子串
            String s2 = palindrome(s, i, i + 1);
            // res = longest(res, s1, s2)
            res = res.length() > s1.length() ? res : s1;
            res = res.length() > s2.length() ? res : s2;
        }
        return res;
    }


    String palindrome(String s, int l, int r) {
        // 防止索引越界
        while (l >= 0 && r < s.length()
                && s.charAt(l) == s.charAt(r)) {
            // 向两边展开
            l--;
            r++;
        }
        // 返回以 s[l] 和 s[r] 为中心的最长回文串
        return s.substring(l + 1, r);
    }




    public static void main(String[] args) {
        LongestPalindrome longestPalindrome = new LongestPalindrome();
        String sbc = longestPalindrome.longestPalindrome("sbbb");
        System.out.println(sbc);
    }





}
